﻿-------------------------------------------------------------------------------
--             Меню плагинов с последнего пункта. © SimSU
-------------------------------------------------------------------------------

---- Настройки
local function Settings()
-- Начало файла Profile\SimSU\Common_RememberPlugin.cfg
return{
  ProcessHotKey=true; -- Запоминать позицию при горячих клавишах.

  KeyF11="F11"; --Prior=50; -- Меню плагинов с восстановлением позиции.
  KeyEnter="Enter NumEnter"; -- Сохранение позиции при выборе плагина.
  KeyClick="MsLClick"; -- Сохранение позиции при выборе плагина мышкой.
  KeyHot="/[LR]Alt.+/"; -- Сохранение позиции при вызове плагина по хоткею.
--  KeyAny="/.+/"; -- Сохранение позиции при вызове плагина по хоткею неявно.
}
-- Конец файла Profile\SimSU\Common_RememberPlugin.cfg
end

_G.far.lang=far.lang or win.GetEnv("farlang")
-- Встроенные языки / Buildin laguages
local function Messages()
if far.lang=="Russian" then
-- Начало файла Profile\SimSU\SimSU\Common_RememberPluginRussian.lng
return{
  Descr="Меню плагинов с последнего пункта. © SimSU";
  Enter="Сохранение позиции при выборе плагина. © SimSU";
  Click="Сохранение позиции при выборе плагина мышкой. © SimSU";
  HotKey="Сохранение позиции при вызове плагина по хоткею. © SimSU";
}
-- Конец файла Profile\SimSU\Common_RememberPluginRussian.lng
else--if far.lang=="English" then
-- Begin of file Profile\SimSU\Common_RememberPluginEnglish.lng
return{
  Descr="Menu of plug-ins from last position. © SimSU";
  Enter="Сохранение позиции при выборе плагина. © SimSU";
  Click="Сохранение позиции при выборе плагина мышкой. © SimSU";
  HotKey="Сохранение позиции при вызове плагина по хоткею. © SimSU";
}
-- End of file Profile\SimSU\Common_RememberPluginEnglish.lng
end end

local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_RememberPlugin"..far.lang..".lng") or Messages)()
local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Common_RememberPlugin.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_RememberPlugin.cfg") or Settings)()

local SimSU=SimSU or {}
SimSU.Common_RememberPlugin={}
-------------------------------------------------------------------------------
local LastPlugin
local PluginsMenuId="937F0B1C-7690-4F85-8469-AA935517F202"

function SimSU.Common_RememberPlugin.Restore()
  Keys("F11"); if LastPlugin then Menu.Select(LastPlugin,0) end
end

function SimSU.Common_RememberPlugin.ProcessEnter()
  LastPlugin=Menu.Value; Keys("AKey")
end

function SimSU.Common_RememberPlugin.ProcessClick()
  Keys("AKey"); if Menu.Id==PluginsMenuId then LastPlugin=Menu.Value; Keys("Enter") end
end

function SimSU.Common_RememberPlugin.ProcessHotKey()
  local Char=akey(1)
  Char=Char:gsub("R?Alt","")
  if     Char=="Add"       then Char="+"
  elseif Char=="BackSlash" then Char="\\"
  elseif Char=="Divide"    then Char="/"
  elseif Char=="Multiply"  then Char="*"
  elseif Char=="Subtract"  then Char="-"
  elseif Char:len()>1 then Char=""
  else
  end
  if Char~="" then
    local pos=Object.CheckHotkey(Char)
    if pos==0 then pos=Object.CheckHotkey(mf.xlat(Char)) end
    if pos>0 then LastPlugin=Menu.GetValue(pos) end -- Сработала горячая клавиша  - запоминаем позицию в меню.
  end
  Keys("AKey")
end;
-------------------------------------------------------------------------------
if not Macro then return {Common_RememberPlugin=SimSU.Common_RememberPlugin} end

local ok, mod = pcall(require,"SimSU.Common_RememberPlugin"); if ok then SimSU=mod else _G.SimSU=SimSU end
-------------------------------------------------------------------------------

Macro {area="Common"; key=S.KeyF11; priority=S.Prior; description=M.Descr;

  action=SimSU.Common_RememberPlugin.Restore;
}
Macro {area="Menu"; key=S.KeyEnter; priority=S.Prior and S.Prior+1 or 51; description=M.Enter;
  condition=function() return Menu.Id==PluginsMenuId end;
  action=SimSU.Common_RememberPlugin.ProcessEnter;
}
Macro {area="Menu"; key=S.KeyClick; priority=S.Prior and S.Prior+1 or 51; description=M.Click;
  condition=function() return Menu.Id==PluginsMenuId end;
  action=SimSU.Common_RememberPlugin.ProcessClick;
}
Macro {area="Menu"; key=S.KeyHot; priority=S.Prior and S.Prior+1 or 51; description=M.HotKey;
  condition=function() return Menu.Id==PluginsMenuId and S.ProcessHotKey end;
  action=SimSU.Common_RememberPlugin.ProcessHotKey;
}
Macro {area="Menu"; key=S.KeyAny; priority=S.Prior; description=M.HotKey;
  condition=function() return Menu.Id==PluginsMenuId and S.ProcessHotKey and Menu.Filter(0,-1)==0 end;
  action=SimSU.Common_RememberPlugin.ProcessHotKey;
}
